package com.ruoyi.site.service.impl;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.site.mapper.UserLicensesMapper;
import com.ruoyi.site.domain.UserLicenses;
import com.ruoyi.site.service.IUserLicensesService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 用户授权Service业务层处理
 */
@Service
public class UserLicensesServiceImpl implements IUserLicensesService
{
    @Autowired
    private UserLicensesMapper userLicensesMapper;

    /**
     * 新增用户授权
     */
    @Override
    public int insertUserLicenses(UserLicenses userLicenses)
    {
        // 可以添加逻辑，检查是否已经存在该许可，防止重复插入
        return userLicensesMapper.insertUserLicenses(userLicenses);
    }

    /**
     * 查询用户授权列表
     */
    @Override
    public List<UserLicenses> selectUserLicensesList(UserLicenses userLicenses)
    {
        return userLicensesMapper.selectUserLicensesList(userLicenses);
    }

    /**
     * 增加授权记录的下载次数
     * (这里需要查找 UserLicenses 记录并更新，但为了简单，先假设我们知道 licenseId)
     */
    @Override
    public int recordDownload(Long licenseId)
    {
        // 实际中应该先根据 userId 和 productId 查找到 licenseId
        return userLicensesMapper.incrementDownloadCount(licenseId);
    }

    /**
     * 检查用户是否拥有下载授权（逻辑保持不变）
     */
    @Override
    public boolean checkUserHasLicense(Long userId, Long productId, String productType)
    {
        int count = userLicensesMapper.countUserLicenses(userId, productId, productType);
        return count > 0;
    }

    /**
     * 增加授权记录的下载次数（原方法保持不变）
     */
    @Override
    public int incrementDownloadCount(Long licenseId)
    {
        return userLicensesMapper.incrementDownloadCount(licenseId);
    }

    // ----------------------------------------------------
    // 核心新增：查找并记录下载次数
    // ----------------------------------------------------
    @Override
    @Transactional // 确保查找和更新在同一个事务中
    public int recordDownloadByProduct(Long userId, Long productId, String productType) {

        // 1. 查找用户的有效 licenseId
        List<Long> licenseIds = userLicensesMapper.selectLicenseIdsByProduct(userId, productId, productType);

        if (licenseIds == null || licenseIds.isEmpty()) {
            // 授权记录不存在，通常在权限检查阶段已被拦截
            return 0;
        }

        // 2. 更新找到的第一个 licenseId 的下载次数 (基于 Mapper XML 中的 LIMIT 1)
        Long licenseIdToUpdate = licenseIds.get(0);

        return userLicensesMapper.incrementDownloadCount(licenseIdToUpdate);
    }
}